package action

import (
	"yunj/pkg/yunj/core/builder/builderaction"
	"yunj/pkg/yunj/core/builder/builderconsts"

	"github.com/gin-gonic/gin"
)

type ActionInterface interface {
	builderaction.ActionInterface
	GetActionDropdown() (res bool, err error) // 获取是否下拉操作
	SetActionDropdown(yes bool) error         // 设置是否下拉操作
	GetActionShow() (res string, err error)   // 获取是否显示
	SetActionShow(show string) error          // 设置是否显示
}

type Action struct {
	builderaction.Action
	Dropdown bool   `json:"dropdown"` // 是否下拉操作
	Show     string `json:"show"`     // 是否显示（默认为yes。laytpl模板语句解析，如："d.status===1 && d.age > 10" 表示：当前行数据状态为1且年龄>10才显示此操作项）
}

// 获取是否下拉操作
func (a *Action) GetActionDropdown() (res bool, err error) {
	err = a.GetError()
	if err != nil {
		return
	}
	res = a.Dropdown
	return
}

// 设置是否下拉操作
func (a *Action) SetActionDropdown(yes bool) (err error) {
	err = a.GetError()
	if err != nil {
		return
	}
	a.Dropdown = yes
	return
}

// 获取是否显示
func (a *Action) GetActionShow() (res string, err error) {
	err = a.GetError()
	if err != nil {
		return
	}
	res = a.Show
	return
}

// 设置是否显示
func (a *Action) SetActionShow(show string) (err error) {
	err = a.GetError()
	if err != nil {
		return
	}
	a.Show = show
	return
}

// 渲染处理
// @param builderId: 构建器id
// @return hasAuth: 是否有权限
// @return err: 错误消息
func (a *Action) RenderHandle(ctx *gin.Context, builderId string) (hasAuth bool, err error) {
	hasAuth, err = a.Action.RenderHandle(ctx, builderId)
	if err != nil || !hasAuth {
		return
	}
	if a.Show == "" {
		a.Show = builderconsts.TABLE_ACTION_SHOW_YES
	}
	return
}
